Handle scroll wheel events.
authorAlexander Larsson <alla@lysator.liu.se>
Mon, 17 Sep 2001 02:19:01 +0000 (02:19 +0000)
committerAlexander Larsson <alexl@src.gnome.org>
Mon, 17 Sep 2001 02:19:01 +0000 (02:19 +0000)
2001-09-16  Alexander Larsson  <alla@lysator.liu.se>

* gtk/gtkoptionmenu.c:
Handle scroll wheel events.

ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtkoptionmenu.c

index 4ab2e19dad72bae26ba4296baae1757218334f1d..8011ff903f251f88b32c5747c2637bb6cde92395 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2001-09-16  Alexander Larsson  <alla@lysator.liu.se>
+
+       * gtk/gtkoptionmenu.c:
+       Handle scroll wheel events.
+
 Fri Sep 14 22:31:25 2001  Matthias Clasen  <matthiasc@poet.de>
 
        * demos/gtk-demo/main.c (setup_default_icon): Use a shaped
index 4ab2e19dad72bae26ba4296baae1757218334f1d..8011ff903f251f88b32c5747c2637bb6cde92395 100644 (file)
@@ -1,3 +1,8 @@
+2001-09-16  Alexander Larsson  <alla@lysator.liu.se>
+
+       * gtk/gtkoptionmenu.c:
+       Handle scroll wheel events.
+
 Fri Sep 14 22:31:25 2001  Matthias Clasen  <matthiasc@poet.de>
 
        * demos/gtk-demo/main.c (setup_default_icon): Use a shaped
index 4ab2e19dad72bae26ba4296baae1757218334f1d..8011ff903f251f88b32c5747c2637bb6cde92395 100644 (file)
@@ -1,3 +1,8 @@
+2001-09-16  Alexander Larsson  <alla@lysator.liu.se>
+
+       * gtk/gtkoptionmenu.c:
+       Handle scroll wheel events.
+
 Fri Sep 14 22:31:25 2001  Matthias Clasen  <matthiasc@poet.de>
 
        * demos/gtk-demo/main.c (setup_default_icon): Use a shaped
index 4ab2e19dad72bae26ba4296baae1757218334f1d..8011ff903f251f88b32c5747c2637bb6cde92395 100644 (file)
@@ -1,3 +1,8 @@
+2001-09-16  Alexander Larsson  <alla@lysator.liu.se>
+
+       * gtk/gtkoptionmenu.c:
+       Handle scroll wheel events.
+
 Fri Sep 14 22:31:25 2001  Matthias Clasen  <matthiasc@poet.de>
 
        * demos/gtk-demo/main.c (setup_default_icon): Use a shaped
index 4ab2e19dad72bae26ba4296baae1757218334f1d..8011ff903f251f88b32c5747c2637bb6cde92395 100644 (file)
@@ -1,3 +1,8 @@
+2001-09-16  Alexander Larsson  <alla@lysator.liu.se>
+
+       * gtk/gtkoptionmenu.c:
+       Handle scroll wheel events.
+
 Fri Sep 14 22:31:25 2001  Matthias Clasen  <matthiasc@poet.de>
 
        * demos/gtk-demo/main.c (setup_default_icon): Use a shaped
index 4ab2e19dad72bae26ba4296baae1757218334f1d..8011ff903f251f88b32c5747c2637bb6cde92395 100644 (file)
@@ -1,3 +1,8 @@
+2001-09-16  Alexander Larsson  <alla@lysator.liu.se>
+
+       * gtk/gtkoptionmenu.c:
+       Handle scroll wheel events.
+
 Fri Sep 14 22:31:25 2001  Matthias Clasen  <matthiasc@poet.de>
 
        * demos/gtk-demo/main.c (setup_default_icon): Use a shaped
index 4ab2e19dad72bae26ba4296baae1757218334f1d..8011ff903f251f88b32c5747c2637bb6cde92395 100644 (file)
@@ -1,3 +1,8 @@
+2001-09-16  Alexander Larsson  <alla@lysator.liu.se>
+
+       * gtk/gtkoptionmenu.c:
+       Handle scroll wheel events.
+
 Fri Sep 14 22:31:25 2001  Matthias Clasen  <matthiasc@poet.de>
 
        * demos/gtk-demo/main.c (setup_default_icon): Use a shaped
index 3af74664ad9361ed8ba3445a1626e71ca9b3f58f..6e8f10e856cb554fcf428a16240ad562e97eb3a3 100644 (file)
@@ -80,6 +80,8 @@ static void gtk_option_menu_position        (GtkMenu            *menu,
 static void gtk_option_menu_show_all        (GtkWidget          *widget);
 static void gtk_option_menu_hide_all        (GtkWidget          *widget);
 static GtkType gtk_option_menu_child_type   (GtkContainer       *container);
+static gint gtk_option_menu_scroll_event    (GtkWidget          *widget,
+                                            GdkEventScroll     *event);
 
 enum
 {
@@ -147,6 +149,7 @@ gtk_option_menu_class_init (GtkOptionMenuClass *class)
   widget_class->expose_event = gtk_option_menu_expose;
   widget_class->button_press_event = gtk_option_menu_button_press;
   widget_class->key_press_event = gtk_option_menu_key_press;
+  widget_class->scroll_event = gtk_option_menu_scroll_event;
   widget_class->show_all = gtk_option_menu_show_all;
   widget_class->hide_all = gtk_option_menu_hide_all;
 
@@ -883,3 +886,49 @@ gtk_option_menu_hide_all (GtkWidget *widget)
   gtk_container_foreach (container, (GtkCallback) gtk_widget_hide_all, NULL);
 }
 
+static gint
+gtk_option_menu_scroll_event (GtkWidget          *widget,
+                             GdkEventScroll     *event)
+{
+  GtkOptionMenu *option_menu = GTK_OPTION_MENU (widget);
+  gint index;
+  gint n_children;
+  gint index_dir;
+  GList *l;
+  GtkMenuItem *item;
+    
+  index = gtk_option_menu_get_history (option_menu);
+
+  if (index != -1)
+    {
+      n_children = g_list_length (GTK_MENU_SHELL (option_menu->menu)->children);
+      
+      if (event->direction == GDK_SCROLL_UP)
+       index_dir = -1;
+      else
+       index_dir = 1;
+
+
+      while (TRUE)
+       {
+         index += index_dir;
+
+         if (index < 0)
+           break;
+         if (index >= n_children)
+           break;
+
+         l = g_list_nth (GTK_MENU_SHELL (option_menu->menu)->children, index);
+         item = GTK_MENU_ITEM (l->data);
+         if (GTK_WIDGET_VISIBLE (item) && GTK_WIDGET_IS_SENSITIVE (item))
+           {
+             gtk_option_menu_set_history (option_menu, index);
+             break;
+           }
+             
+       }
+    }
+
+  return TRUE;
+}
+